![]() |
画像を印刷する目的で、文字列の印刷はできません。 FormにPanel1,2を配置し、Image1、ScrollBar1などが見やすいようカスタム編集で色をつけました。 Image2はVisible Faleとし裏でBitmapを画像の元フアイルの画素数と同じにし印刷の時に使用しました。 ScrollBarは100から-100ドットを画像データの幅に加算し縮小、拡大を行いました。またImage1のBitmapで印刷すると、元画像の の精度を保てないのでImage2のBitmapで印刷しました。 Image1は印刷時のイメ−ジを示しているだけです。 プリンタ−設定はPrinterSetupDialogを利用し、MainMenuは終了、開く→フアイル を設定してあります 画像ソフトなど重たいソフトを使用せず、MyTrim,Gresize、Gprintを組み合わせ、画像の大きさ、クリップボ−ドのデータの保存、印刷など簡単な編集を したいと思っております。 ImageではなくImageViewerを使ったほうが簡単なようでした。 VCLで同じようソフト以前作って使用していたのですが、最近のデジカメの画素数が大きくなりVCLでは画像の読み込みに時間が掛かりすぎ我慢ができず FireMonkeyでソフトを作りなおしました。 |
/---Gprint------------------------------------------------------------------------ #include#pragma hdrstop #include "FMX.Printer.hpp" #include #include //#include #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.fmx" TForm1 *Form1; //--------------------------------------------------------------------------- Graphics::TBitmap *bmp= new TBitmap(0, 0); Graphics::TBitmap *bmp1= new TBitmap(0, 0); __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void Set_Image2() { TRectF SrcRect, DestRect; float r=Form1->Image1->Width/Form1->Image1->Height; Form1->Image2->Width=bmp->Width; Form1->Image2->Height=Form1->Image2->Width/r; if(Form1->Image2->Height>5000) //bitmapの縦は8000ぐらいまでが限度のよう(このPCでは)? { Form1->Image2->Height=5000; Form1->Image2->Width=5000*r; } if(bmp->Width<1000) { Form1->ScrollBar1->SmallChange=5; } else { Form1->ScrollBar1->SmallChange=10; } r=(float)bmp->Width/bmp->Height; bmp1->Width=Form1->Image2->Width; bmp1->Height=bmp1->Width/r; SrcRect = TRectF(0, 0, bmp->Width, bmp->Height); DestRect = TRectF(0, 0, bmp1->Width, bmp1->Height); bmp1->Canvas->BeginScene(); bmp1->Canvas->DrawBitmap(bmp, SrcRect, DestRect, 1,false); bmp1->Canvas->EndScene(); Form1->Image2->Bitmap=bmp1; } void scroll_sub() { TRectF SrcRect, DestRect; float scrollV_X,scrollV_Y; float r; float paper_x,paper_y; float offset_x=0; float offset_y=0; r=(float)bmp->Width/bmp->Height; scrollV_X=Form1->ScrollBar1->Value; scrollV_Y=scrollV_X/r; paper_x=bmp1->Width+scrollV_X; paper_y=bmp1->Height+scrollV_X; offset_x=(Form1->Image2->Width-paper_x)/2; offset_y=(Form1->Image2->Height-paper_y)/2; SrcRect = TRectF(0, 0, bmp->Width, bmp->Height); DestRect = TRectF(offset_x,offset_y, paper_x+offset_x, paper_y+offset_y); TBitmap *tmp=new TBitmap(Form1->Image2->Width,Form1->Image2->Height); Form1->Image2->Bitmap=tmp; delete tmp; Form1->Image2->Bitmap->Canvas->BeginScene(); Form1->Image2->Bitmap->Canvas->DrawBitmap(bmp, SrcRect, DestRect, 1); Form1->Image2->Bitmap->Canvas->EndScene(); Form1->Label2->Text=Form1->ScrollBar1->Value; } void Panel_Set() { Form1->Panel1->Width=Form1->Image1->Width; Form1->Panel1->Height=Form1->Image1->Height; } void prn_setup() //printer setup { float rscale,Pw,Ph; if(Form1->PrinterSetupDialog1->Execute()) { Pw=Printer::Printer()->PageWidth; Ph=Printer::Printer()->PageHeight; rscale = (float) Pw/Ph; int wide=Form1->Image1->Width; Form1->Image1->Height=wide/rscale; Form1->Image1->Position->Y=0; Form1->Image1->Position->X=0; Set_Image2(); Panel_Set(); Form1->ScrollBar1->Enabled=true; Form1->ScrollBar1->Value=0.0; Form1->ScrollBar1->Enabled=true; Form1->Button1->Enabled=true; } } void prn() //印刷 { TRectF SrcRect, DestRect; float rw,rh,r; float px,py; float paper_w,paper_h; float offset_x=0; float offset_y=0; float Pw,Ph; Pw=Printer::Printer()->PageWidth; Ph=Printer::Printer()->PageHeight; r= (float)Form1->Image2->Bitmap->Width/Form1->Image2->Bitmap->Height; rw=Pw/(float)Form1->Image2->Bitmap->Width; paper_w=Form1->Image2->Bitmap->Width*rw; paper_h=paper_w/r; offset_x=(Pw-paper_w)/2.0; offset_y=(Ph-paper_h)/2.0; SrcRect = TRectF(0, 0, Form1->Image2->Bitmap->Width, Form1->Image2->Bitmap->Height); DestRect = TRectF(offset_x,offset_y, paper_w+offset_x, paper_h+offset_y); Printer::Printer()->BeginDoc(); Printer::Printer()->Canvas->DrawBitmap(Form1->Image2->Bitmap, SrcRect, DestRect, 1); Printer::Printer()->EndDoc(); } //--------------------------------------------------------------------------- void __fastcall TForm1::MenuItem1Click(TObject *Sender) //Close { delete bmp; Close(); } //--------------------------------------------------------------------------- void __fastcall TForm1::MenuItem2Click(TObject *Sender) //Open File { if (OpenDialog1->Execute()) { bmp->LoadFromFile(OpenDialog1->FileName); Button1->Enabled=true; Button2->Enabled=true; ScrollBar1->Enabled=true; ScrollBar1->Value=0; Label3->Text=OpenDialog1->FileName; Set_Image2(); Image1->Bitmap=Image2->Bitmap; String a1=bmp->Width; String a2=bmp->Height; Label4->Text=a1+" X "+a2+ " dot"; } } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { Image1->Width=300; Image1->Height=Image1->Width/0.701; //A4の比率に修正 Image1->Position->X=0; Image1->Position->Y=0; ScrollBar1->Value=0; Panel_Set(); } //--------------------------------------------------------------------------- void __fastcall TForm1::ScrollBar1Change(TObject *Sender) //拡大、縮小 { scroll_sub(); //Image2 Set Image1->Bitmap=Image2->Bitmap; Label2->Text=ScrollBar1->Value; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) //printer setup { prn_setup(); ScrollBar1->Enabled=true; Form1->TForm1::ScrollBar1Change(Sender); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) //印刷 { prn(); } //---------------------------------------------------------------------------